#!usr/bin/env python3
#真正在app中使用的配置文件
import os
from app.utils import strUtil 
from app.lang.langConfig import langs
'''
以BP结尾的命名表示蓝本(Blueprint)
'''

basedir = os.path.abspath(os.path.dirname(__file__))
class DFConfig(object): #默认配置
	DEBUG = False
	SECRET_KEY = strUtil.getSecretKey() #使用设置密匙,密匙设置一般不可见的(设置在环境变量中)，或者复杂的	
	#DATABASE_URI = 'sqlite://:memory:'  
	SQLALCHEMY_DATABASE_URI = 'sqlite:///'+os.path.join(basedir,'db.sqlite') #设置数据库
	SQLALCHEMY_COMMIT_ON_TEARDOWN = True # 是否每次请求都自动提交数据的改动
	#如果设置成 True (默认情况)，Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。
	#这需要额外的内存， 如果不必要的可以禁用它。
	SQLALCHEMY_TRACK_MODIFICATIONS = True	
	#定义发送邮件的配置(QQ邮箱作为服务器)
	MAIL_SERVER = 'smtp.qq.com'
	MAIL_PORT  = 465
	#MAIL_USE_TLS = True # 启用传输层安全（Transport Layer Security，TLS）协议; 这个设置为True的话 QQ发不出邮件
	MAIL_USE_SSL = True #启用安全套接层（Secure Sockets Layer，SSL）协议
	MAIL_USERNAME = "623097864@qq.com" 
	MAIL_PASSWORD = "wjgsjqcicnvlbdjh" #不是邮件的登陆密码 而且QQ邮箱给的授权码
	MAIL_DEBUG = True
	HELLOCODE_POSTS_PER_PAGE = 10
	@staticmethod
	def init_app(app):
		pass

class DevelopmentConfig(DFConfig): #开发版本的配置
	DEBUG = True

class ProductConfig(DFConfig):#发布版本的配置
	SECRET_KEY = "kjvldap9s16i8fxorwznbh1mc054ytu7q2eg"

class Testing(DFConfig):
	DEBUG = True
	SQLALCHEMY_DATABASE_URI = 'sqlite:///'+os.path.join(basedir,'db_test.sqlite') #设置数据库
	WTF_CSRF_ENABLED = False #禁用wtform的 csrf令牌
	
config = {
	"df":DFConfig, #默认配置
	"dev":DevelopmentConfig,#开发版本的配置
	"prd":ProductConfig,#最终产品的配置
	"test":Testing #测试的配置

}
#定义项目的全局配置		
appConfig = {
	"appTitle":"HelloCode",
	"appVersion":"V1.0.0",
	"secretKey":DFConfig.SECRET_KEY,
	"adminMail":DFConfig.MAIL_USERNAME,
	"lang":'cn', #设置语言包
}

def getAppConfig(keyName):
	if keyName not in appConfig:
		raise Exception(keyName+"的配置不存在")
	return appConfig[keyName]

#获取配置的语言包
def getLang(key,*args):
	langDict = langs[appConfig['lang']]
	if key not in langDict:
		raise KeyError("键"+key+"不存在语言包中")
	txt = langDict[key]
	if len(args)>0:
		txt = txt.format(*args)	
	return txt
						